package com.mjf.scala.chapter07

import scala.collection.mutable

/**
 * 对两个map集合之间的元素进行合并
 */
object Scala14_TestFun {
  def main(args: Array[String]): Unit = {

    // 最终合并后的效果：Map("a"->5, "b"->7, "c"->3, "d"->6)
    val map1 = mutable.Map("a"->1, "b"->2, "c"->3)
    val map2 = mutable.Map("a"->4, "b"->5, "d"->6)

    // 技术选型：两个集合之间合并不属于集合内部元素聚合，所以fold更合适
    val res: mutable.Map[String, Int] = map1.foldLeft(map2) {
      // mm表示map2，kv表示map1中的每个元素
      (mm, kv) => {
        // 指定合并规则
        val k: String = kv._1
        val v: Int = kv._2
        // 根据map1中的元素的key,到map2中获取value
        mm(k) = mm.getOrElse(k, 0) + v // map2中没有的key会进行添加操作
        mm // 将map2返回
      }
    }

    println(res)    // Map(b -> 7, d -> 6, a -> 5, c -> 3)

  }
}
